/*! \file blackscholesmertonHWprocess.hpp
    \brief Black-Scholes-Merton process extended to employee options as suggested by Hull-White
*/

#ifndef quantlib_black_scholes_merton_hw_process_hpp
#define quantlib_black_scholes_merton_hw_process_hpp

#include <ql/processes/blackscholesprocess.hpp>

namespace QuantLib {

    //! experimental Black-Scholes-Merton stochastic process for employee options as suggested by Hull-White
    /*! This class allows to choose a built-in discretization scheme

        \ingroup processes
    */
    class BlackScholesMertonHWProcess : public BlackScholesMertonProcess 
	{
      public:
        BlackScholesMertonHWProcess(
            const Handle<Quote>& x0,
            const Handle<YieldTermStructure>& dividendTS,
            const Handle<YieldTermStructure>& riskFreeTS,
            const Handle<BlackVolTermStructure>& blackVolTS,
			const Handle<YieldTermStructure>& employeeLossTS,
            const boost::shared_ptr<discretization>& d =
                  boost::shared_ptr<discretization>(new EulerDiscretization));
        Real drift(Time t, Real x) const;
        Real evolve(Time t0, Real x0, Time dt, Real dw) const;

		const Handle<YieldTermStructure>& employeeLossRate() const { return employeeLossRate_; }
      private:
		Handle<YieldTermStructure> employeeLossRate_;
    };
}


#endif